草庐IT

c++ - 单例 : C++ shared dll

全部标签

java - 我们可以通过哪些不同的方式打破 Java 中的单例模式

我们可以通过哪些不同的方式打破Java中的单例模式。我知道一种方法,即如果我们不同步singleton中的方法,那么我们可以创建多个类的实例。因此应用了同步。有没有办法打破单例java类。publicclassSingleton{privatestaticSingletonsingleInstance;privateSingleton(){}publicstaticSingletongetSingleInstance(){if(singleInstance==null){synchronized(Singleton.class){if(singleInstance==null){sin

java - 消除单例

我一直在阅读大量有关使用单例类如何由于隐藏的依赖关系、难以测试等原因而成为编程中的不良做法的文章。我读过的很多论坛帖子都说你仍然可以保持单例的主要功能,即只允许一个实例而不使用单例模式。我想知道是否有人可以举一个实际的例子。许多帖子都建议使用工厂类来创建清楚显示依赖关系的单例实例。对我来说,这似乎就像采用多个单例并将它们组合成一个单一的工厂单例,这会遇到同样的问题吗? 最佳答案 “单例模式”的问题其实不在于单例本身,而在于单例类中不灵活的静态工厂方法。而且我相信即使在GoF书中,这也被认为是如何访问单例的示例,而不是最终的实现模型。

java - Java单例类中final关键字是必须的吗?

publicclassMySingleton{privatestaticfinalMySingletonINSTANCE=newMySingleton();privateMySingleton(){}publicstaticgetInstance(){returnINSTANCE;}}这是实现单例的正确方法吗?如果是,那么final关键字的必要性是什么? 最佳答案 Final将确保实例在创建后不可更改。如果你只包含一个构造函数,而不包含setter,那没什么大不了的。没有人可以更改您的INSTANCE,而您也没有更改它。将它留在那里

java - Dagger 2 单例不工作

使用Dagger2,我试图在单个范围内的多个位置注入(inject)一个单例对象。但是,我的解决方案似乎每次都创建一个新实例。在这个测试项目中,我有一个初始化DaggerModule的MainActivity。DaggerModule提供对象Box和Cat,其中Box以Cat作为参数。我还在我的MainActivity中加入了Cat。最后,我检查了两个注入(inject)的Cat变量的引用(分别在Box和MainActivity中),但它们不是同一个实例。如果我在MainActivity中调用provideCat()两次,则会提供相同的实例。主要Activity:publicclass

java - 曾经需要销毁单例实例吗?

通过使用单例,只能创建它的一个实例。我们是否需要销毁该实例?我有一个单独的DBManager,它管理JDBC连接和查询操作。通过调用它的静态newInstance方法,我可以获得它的实例,然后进行一些查询。最后,我想关闭数据库连接,我又调用了另一个静态方法close来关闭JDBC连接。现在连接已经关闭,而DBManager的实例仍然存在但没有用。我是否需要通过例如将其分配给null来销毁它?否则以后可能会被错误引用。如果我给那个实例赋值null,然后再次调用newInstance方法,我会得到另一个新的不同实例吗? 最佳答案 我不会

java - 单例中的线程安全

我知道Java中的双重锁定已被破坏,那么在Java中使单例线程安全的最佳方法是什么?我首先想到的是:classSingleton{privatestaticSingletoninstance;privateSingleton(){}publicstaticsynchronizedSingletongetInstance(){if(instance==null)instance=newSingleton();returninstance;}}这个有用吗?如果是这样,这是最好的方法吗(我想这取决于具体情况,所以说明何时特定技术最好,会很有用) 最佳答案

java - 这个 Java 单例能否在 WebSphere 6 中重复重建?

我正试图找出我们系统中的一个问题,下面的代码让我很担心。以下发生在主servlet的doPost()方法中(名称已更改以保护有罪):...if(Single.getInstance().firstTime()){doPreperations();}normalResponse();...单例“Single”如下所示:privatestaticSingletheInstance=newSingle();privateSingle(){...loadproperties...}publicstaticSinglegetInstance(){returntheInstance;}通过将其设置

c# - 有 2 个 Web 服务器,单例类会有 2 个实例吗?

如果有2个Web服务器,一个单例类是否会有2个实例? 最佳答案 无论是.net还是java,这两个Web服务器都将拥有各自的应用进程实例。所以是的,两个服务器都将有它们各自的单例类实例。不管这两台web服务器是两台不同的物理机,即使是在同一台服务器上,也肯定会完全运行在不同的进程上。每个进程都会将其对象加载到内存中,与任何其他进程分开。特别是在asp.net的情况下-即使在单个Web服务器中,每个站点也会导致Singleton类的单独实例。因为asp.networker进程中的每个站点都在单独的应用程序域中加载,所以没有两个域可以相

java - 具有多个不同类加载器的单例类

例如,我有类Singleton和静态字段instance:publicclassSingleton{privatestaticSingletoninstance;//othercode,construct,getters,nomatter}我可以用两个不同的类加载器加载这个类两次。我怎么能避免呢?这是不安全和危险的。此外,如果我将实例设置为null,它会为两个类都设置为null吗?Singletonsingleton=Singleton.getInstance();singleton=null; 最佳答案 如果你想要跨类加载器的真正

java - Web 应用程序中如何处理单例?

据我了解,单例基本上是当您有一个私有(private)成员代表您想要为其拥有单个实例的对象时。然后在构造函数中初始化成员对象。对该对象的所有引用都是通过公共(public)属性完成的,公共(public)属性只引用已经实例化的私有(private)成员。现在在Web应用程序中,这是如何工作的?在tomcat关闭之前,单个实例是否只是在容器(比如tomcat)中徘徊? 最佳答案 如果您的执行环境使用多个类加载器,那么您的类的每个实例都有一个单例。如果你的单例类被加载到不同的类加载器中,那么它实际上是两个不同的类,那么就会有两个“单例”